// 引入登录接口函数,用于获取token
import { login, getProfile, getUserDetail } from '@/api/user'
const state = {
  // 存储token的变量
  token: localStorage.getItem('hr-token') || '',
  // 存储用户信息
  userInfo: {}
}
const mutations = {
  // 修改token的函数
  setToken(state, newToken) {
    state.token = newToken
    // 数据持久化,token存储本地
    localStorage.setItem('hr-token', newToken)
  },
  // 修改用户信息的函数
  setUserInfo(state, newUserInfo) {
    state.userInfo = newUserInfo
  },
  // 退出操作,清除用户信息
  logout(state) {
    localStorage.removeItem('hr-token')
    state.token = ''
    state.userInfo = {}
  }
}
const actions = {
  // login: function(store, loginForm) {
  //   // 调用登录接口函数,发送请求获取到token
  //   login(loginForm).then(res => {
  //     // console.log(res)
  //     // 调用mutations中的更改token函数,进行token更改
  //     store.commit('setToken', res.data.data)
  //   })
  // }

  // 优化写法:
  // async,异步
  async login(store, loginForm) {
    // .then代表需要等它前面的执行完毕才会执行.then里面的函数,通过await可以简写,将.then的函数写出来,效果一样
    // await必须搭配async使用
    const res = await login(loginForm)
    // store.commit('setToken', res.data.data)
    // 经过响应拦截器,数据已经简化
    store.commit('setToken', res)
  },
  // 获取用户信息userInfo的函数
  async getUserInfo(store) {
    // console.log(123)
    // 调用请求数据接口函数
    const res = await getProfile()

    // 还需要调用获取详细信息的接口,获取到头像信息,再将两个接口的数据合并在一起,就是完整的用户信息
    // 详细信息接口所需的id在获取用户基本信息中已经拿到
    const detail = await getUserDetail(res.userId)
    // 调用mutations修改state的数据,将两个接口函数获取到的数据合并
    store.commit('setUserInfo', {
      ...res,
      ...detail
    })
    // console.log(store.state.userInfo)
    // console.log(res)
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}

